//与用户注册、用户登录、退出登录相关的代码
//导入express包
const express = require('express');
//导入md5包
const md5 = require('md5')
//导入users集合对象
const UserModel = require('../../models/UserModel')
//获取date-fns包的format方法
const { format } = require('date-fns')


//创建路由对象
const router = express.Router();


//响应注册页面
router.get('/reg', (req, res) => {
    //使用ejs渲染(响应注册页面)
    res.render('reg')
})

//响应登录页面
router.get('/login', (req, res) => {
    //使用ejs渲染(响应登录页面)
    res.render('login')
})

//处理用户提交的注册信息
router.post('/reg', (req, res) => {
    //获取用户注册时的时间
    const time = format(new Date(), 'yyyy-MM-dd HH:mm:ss')
    //获取用户填写的注册信息
    const { username, password, email } = req.body
    //将用户的注册信息存入数据库users集合中
    UserModel.create({
        username: username,
        password: md5(password),
        email: email,
        time: time
    }, (err, data) => {
        if (err) {
            res.status(500).send('服务器内部错误...')
            return
        }
        //使用ejs渲染(提醒用户注册成功)
        res.render('regRemind', { username: username, time: time })
    })
})

//处理用户提交的登录信息
router.post('/login', (req, res) => {
    //先获取用户填写的登录信息
    const { username, password } = req.body
    //后校验登录信息是否匹配(根据查询条件来校验)
    UserModel.findOne({ username: username, password: md5(password) }, (err, data) => {
        if (!data) {
            res.send('账号或密码错误...')
            return
        }
        //获取用户当前计算机的时间
        const time = format(new Date(), 'yyyy-MM-dd HH:mm:ss')
        //登录成功后设置session信息
        req.session.user = {
            username: data.username,
            userId: data._id
        }
        //重定向至首页
        res.redirect('/')
    })
})

//处理用户退出登录
router.get('/logout', (req, res) => {
    //销毁session信息
    req.session.destroy()
    //重定向至登录页面
    res.redirect('/login')
})


//数据暴露
module.exports = router;